package sv.com.objetos.auxiliares;

import java.util.StringTokenizer;

/**
 * @author dsaravia
 *
 */
/**
 * @author dsaravia
 *
 */
public class NumberO {
	public Object numero;
	public NumberO(){}
	
	public NumberO(Object numero){
		this.numero=numero;
	}
	/**
	 * @param numeroS String que se quiere evaluar si esta compuesto de solo numeros
	 * @return true si lo componen unicamente numero(s) y false en caso contrario
	 */
	public static boolean isNumber(String numeroS){
		if(numeroS==null) return false;
		try{
			double cantidadDinero=Double.parseDouble(numeroS.trim());
			cantidadDinero++;
		}catch(NumberFormatException e){
			
			return false;
		}
		return true;
	}
	public static boolean isLong(String numeroS){
		
		try{
			long cantidadDinero=Long.parseLong(numeroS.trim());
			cantidadDinero++;
		}catch(NumberFormatException e){
			
			return false;
		}
		return true;
	}
	
	public static boolean isLong(Object numero){
		try{
			Long.parseLong(numero.toString().trim());
		}catch(Exception e){
			return false;
		}
		return true;
	}
	
	
	public static boolean isLongPositiveNZ(String numeroSt){
		String numeroS=numeroSt.trim();
		if(isLong(numeroS))
			if(Long.parseLong(numeroS)>0)
				return true;
			else return false;
		else return false;
			
	}
	
	public static boolean isLongPositive(String numeroSt){
		if(numeroSt==null) return false;
		String numeroS=numeroSt.trim();
		if(isLong(numeroS))
			if(Long.parseLong(numeroS)>0)
				return true;
			else return false;
		else return false;
			
	}
	
	public static boolean isLongPositive(Long numeroL){
		if(numeroL==null)return false;
		if(numeroL.longValue()>=0)
			return true;
		else return false;
	}

	/**Transforma de doble a long, truncando la parte decimal.
	 * @param numero
	 * @return
	 */
	public static long transformar(double numero){
		String ns=String.valueOf(numero);
		StringTokenizer st=new StringTokenizer(ns,".");
		long numeroEntero=0;
		while(st.hasMoreTokens()){
			numeroEntero=Long.valueOf(st.nextToken()).longValue();
			break;
		}
		return numeroEntero;
		
	}
	public static void main(String [] args){
		double a=2.51;
		System.out.println(transformar(a));
		System.out.println(esFraccionario(a));
	}
	
	public static boolean esFraccionario(double numero){
		String ns=String.valueOf(numero);
		StringTokenizer st=new StringTokenizer(ns,".");
		int cont=1;
		while(st.hasMoreTokens()){
			if(cont==2)
				return isLongPositive(st.nextToken());
			st.nextToken();
			cont++;
		}
		return false;
	}
	
	
	public static Boolean esVacioLong(Long objLong){
		if(objLong==null)return true;
		if(objLong.longValue()==0) return true;
		return false;
	}
	
	
	/**@param num: numero a evaluar
	 *@return Si el objeto es nulo o igual a cero, retorna un null, de lo 
	 * contrario retorna al mismo numero
	 * */
	public static Long traerNulo(Long num){
		if(num==null) return num;
		if(num.longValue()==0) return null;
		return num;
	}
	
	
	/**
	 * Traduce valor a Long
	 * @param valor
	 * @return
	 */
	public static Long traducirValorL(String valor){
		Long valorL=new Long(-1);
		try{
			valorL=Long.valueOf(valor);
		}catch(Exception e){
		}
		return valorL;
	}
	/**
	 * Traduce valor a Integer
	 * @param valor
	 * @return
	 */
	public static Integer traducirValorI(String valor){
		Integer valorI=new Integer(-1);
		try{
			valorI=Integer.valueOf(valor);
		}catch(Exception e){
		}
		return valorI;
	}
	
	/**si el objeto "o" no puede ser traducido a un Integer, entonces devuelve 0*/
	public static Integer nvlI(Object o){
		Integer nl=new Integer(-1);
		try{
			nl=Integer.valueOf(o.toString());
		}catch(Exception e){
		}
		return nl;
	}
	
	/**si el objeto "o" no puede ser traducido a un Long, entonces devuelve 0*/
	public static Long nvlL(Object o){
		Long nl=new Long(-1);
		try{
			nl=Long.valueOf(o.toString());
		}catch(Exception e){
		}
		return nl;
	}
	
	/**si el objeto o no puede ser traducido a un Double, entonces devuelve 0*/
	public static Double nvlD(Object o){
		Double nl=new Double(-1);
		try{
			nl=Double.valueOf(o.toString());
		}catch(Exception e){
		}
		return nl;
	}

	public Object getNumero() {
		return numero;
	}

	public void setNumero(Object numero) {
		this.numero = numero;
	}
}
